// IRenderAPI.h
// Matthew DiBernardo
// 03.30.09
//
// Declares the IRenderAPI interface, which serves as a framework for all
// render API wrappers to be used by the Graphics class. Each render API
// wrapper abstracts the functionality of the API it is constructed for,
// and provides access to the key features of that API to the Graphics class
// while still hiding all the API code from the rest of the program.
//
// In short: the API wrapper is the boiler room of the graphics pipeline (or
// the door to it, at the very least), where all the actual drawing occurs.
// It is left up to the rest of the program to manage gameplay and other
// functionality.

#ifndef _IRENDERAPI_H_
#define _IRENDERAPI_H_

#include <vector>
#include "IRenderable.h"

class IRenderAPI
{
public:
    virtual ~IRenderAPI(void) {};

    virtual bool Init(int argc, char** argv) = 0;
    virtual bool Shutdown(void) = 0;

	virtual void Render3D(const std::vector<IRenderable*>* drawList) = 0;
	virtual void Render2D(const std::vector<IRenderable*>* drawList) = 0;

    virtual bool Begin(void) = 0;
    virtual bool End(void) = 0;

	virtual void Begin2D() = 0;
	virtual void End2D() = 0;

	virtual void Resize(int width, int height) = 0;

	virtual void SetCameraTransform(Matrix4 transform) = 0;
};

#endif
